# -*- coding: utf-8 -*-
"""
------------------------------------------------------------------------------
    File Name:  base_demo
    Author   :  wanwei1029
    Date     :  2018-11-05
    Desc     :
------------------------------------------------------------------------------
"""
import codecs
import os
from gensim import corpora
from gensim import models


def process_raw_data(file_path):
    """
    将输入数据转换为二维数据形式.
    :param file_path:
    :return:
    """
    output_list = list()
    with codecs.open(file_path, 'r', encoding="utf-8") as f:
        for line in f:
            splits = line.strip().split()
            output_list.append(splits)
    return output_list


def gensim_demo(file_path):
    """
    一个简单的事例，将原始语料向量化并转换成tfidf模型，然后针对新的语料，计算tfidf的权重。
    :param file_path:
    :return:
    """

    data = process_raw_data(file_path)
    # 根据语料生成词典
    dictionary = corpora.Dictionary(data)
    print(dictionary.token2id)
    # 生成字典后，我们可以对于新的文本向量化处理，处理后的向量顺序与原文档的顺序无关。
    # 返回的结果，类似（向量id, 出现次数），词典中没有的没忽略。
    test_data = "我 肯定 保 保保单 咨询 贷款 的吧	咨询"
    test_vec = dictionary.doc2bow(test_data.split())
    print(test_vec)
    # 我们对语料进行向量化表示，这样就得到向量化表示的语料，其它的模型，也是将语料从一种形式的向量化，转换成另外一种。
    bow_corpus = [dictionary.doc2bow(data_item) for data_item in data]
    print(len(bow_corpus))
    # 以tfidf为例，将向量化之后的语料，转换为tfidf模型
    tfidf = models.TfidfModel(bow_corpus)
    print(tfidf)
    # 新的语料，进行tfidf处理，注意，此处是中括号，不是小括号,也就不是函数调用。
    test_tfidf = tfidf[test_vec]
    print(test_tfidf)


def demo():
    """
    """


if __name__ == '__main__':
    base_path = "./data"
    test_method = "gensim_demo"
    if test_method == "demo":
        demo()
    elif test_method == "gensim_demo":
        gensim_demo(os.path.join(base_path, "test_data.txt"))
